home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / interp / perl5.005.tar.gz / perl5.005.tar / perl5.005 / Porting / fixvars < prev    next >
Text File  |  1998-07-21  |  1KB  |  70 lines

  1. #!/usr/local/bin/perl -w
  2. use Data::Dumper;
  3.  
  4. my $targ = (@ARGV) ? join(' ',@ARGV) : 'miniperl' ;
  5.  
  6. my $work = 1;
  7. while ($work)
  8.  {
  9.   open(PIPE,"make $targ 2>&1 |") || die "Cannot open pipe to make:$!";
  10.   my %fix;
  11.   while (<PIPE>)
  12.    {
  13.     if (/^(.*):(\d+):\s+\`(\w+)'\s+undeclared/ && -f $1 )
  14.      {
  15.       my ($file,$line,$var) = ($1,$2,$3);
  16.       $fix{$file} = [] unless exists $fix{$file}; 
  17.       push(@{$fix{$file}},[$line => $var]) unless ($var =~ /^PL_/ || $file =~ /\.h$/);
  18.      }
  19.     print;
  20.    }
  21.   close(PIPE);
  22.   warn "Make retured $?\n";
  23.   last unless $?;
  24.   my $changed = 0;
  25.   foreach my $file (keys %fix)
  26.    {          
  27.     my @ar = sort( { $a->[0] <=> $b->[0] } @{delete $fix{$file}});
  28.     my @miss;
  29.     my $fixed = 0;
  30.     unless (-w $file)
  31.      {
  32.       system("d4","edit",$file);
  33.      }             
  34.     @ARGV = ($file);
  35.     $. = 0;
  36.     local $^I = '.sav';
  37.     while (<>)
  38.      {
  39.       while (@ar && $. == $ar[0][0])
  40.        {
  41.         my ($line,$var) = @{shift(@ar)};
  42.         if (s/\b$var\b/PL_$var/)
  43.          {
  44.           warn "$file:$line: FIX $var\n"; 
  45.           $fixed++;
  46.           $changed++;
  47.          }
  48.         else
  49.          {
  50.           push(@miss,[$line,$var,$_]);
  51.          }
  52.        }
  53.       print;
  54.      }
  55.     unless ($fixed)
  56.      {
  57.       rename("$file$^I",$file);
  58.       if (@miss)
  59.        {
  60.         while (@miss)
  61.          {
  62.           my ($line,$var,$txt) = @{shift(@miss)};
  63.           warn "$file:$line:$var | $txt";
  64.          }
  65.        }
  66.      }    
  67.    }
  68.   last unless $changed;
  69.  }
  70.